//
//  ZXKProxy.m
//  02-动态拦截系统原声API
//
//  Created by ItHeiMa on 2017/9/2.
//  Copyright © 2017年 itHeima. All rights reserved.
//

#import "ZXKProxy.h"

@interface ZXKProxy ()

@property(nonatomic,strong)NSObject *objc;

@end

@implementation ZXKProxy

- (void)transForm:(NSObject *)object
{
    self.objc = object;
}


//对象的消息机制两个步骤缺一不可

//2.检查方法是否实现(能否调用)
- (void)forwardInvocation:(NSInvocation *)invocation
{
    if (self.objc) {
        //1.设置调用的执行者
        [invocation setTarget:self.objc];
        
        //1.1 动态拦截方法的参数
        //设置参数  argument:参数的地址  index:参数的下标  系统底层有两个参数占位符 一个是对象一个是方法本身  我们自己的冒号是从第二个下标开始的
        if([self.objc isKindOfClass:NSClassFromString(@"Teacher")])
        {
            NSString *str = @"UI";
            [invocation setArgument:&str atIndex:2];
        }
        
        //2.开始调用
        [invocation invoke];
    }
    
}

//1.检查方法签名(检查有没有方法叫这个名字)
//方法1如果崩溃了就不会去方法2
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel
{
    NSMethodSignature *signuture = nil;
   
    signuture = [self.objc methodSignatureForSelector:sel];
  
    return signuture;
}

@end
